\documentclass{beamer}
\usepackage{beamerthemeshadow}

%para el tipo de caracteres usado en el texto: esto permite meter los tildes sin tener que poner caracteres de escape.
\usepackage[utf8]{inputenc}

%comando para destacar las cosas que tenemos pendientes o para dejar algun mensaje.
\newcommand{\cartel}[2]{{\sffamily\slshape \colorbox{red}{#1:}{\ #2}}}

\usepackage{subfigure}

\begin{document}
\title{Sistemas de Control de Versiones}  
\titlegraphic{\includegraphics[scale=0.15]{img/gsl_logo.png}}

\author{Campo, Del Castillo, Fausd, Schnidrig}


\date{\today} 

\frame{\titlepage} 

\frame{\frametitle{Contenido}
\tableofcontents[pausesections]
} 

\section{Introducción} 
\begin{frame}
\frametitle{Introducción} 
\tableofcontents[currentsection]
\end{frame}

\begin{frame}
\frametitle{Descripción del problema} 

Tareas relacionados con el control de versiones:

\begin{itemize}
\item Copias de los distintos avances o cambios en el proyecto
\item Integración de versiones o avances
\item Historial de cambios
\item Seguimiento del avance de los integrantes del proyecto
\item Volver a un estado anterior del proyecto
\end{itemize}
\end{frame}

\begin{frame}
\begin{block}{¿Qué es un Sistema de Control de Versiones?}
Es una herramienta que permite organizar la administración de un proyecto, centralizándolo y coordinando el esfuerzo. Guarda las diferencias de uno o mas archivos y posibilita el seguimiento de su evolución temporal. Esto es especialmente útil con archivos de código fuente, aunque podría ser empleado para los de cualquier tipo.
\end{block}
\end{frame}

\begin{frame}
\frametitle{Características}
Uno de los conceptos más importantes de estos sistemas es la administración del cambio. Se suele incluir, por lo menos, la información que se presenta a continuación:
\begin{itemize}
\item Fecha y hora que se registró el cambio
\item Autor del mismo
\item Opcionalmente se incluye un texto descriptivo que motivo el mismo
\end{itemize}

\begin{block}{}
Es muy útil cuando una o varias personas trabajan sobre un mismo proyecto. 
\end{block}
\end{frame}


\begin{frame}
\frametitle{Elementos}
Conceptos principales:
\begin{itemize}
\item \textbf{Repositorio:} base de datos en donde se almacenan los archivos.

\item \textbf{Operaciones:} primitivas disponibles que se pueden utilizar sobre los elementos del repositorio (archivos). Por ejemplo: eliminar, añadir, actualizar, entre otras.

\item \textbf{Historial:} registro histórico de operaciones realizadas. Se puede volver a cualquier estado previo.

\end{itemize}
\end{frame}

\section{Ventajas y desventajas} 
\begin{frame}
\frametitle{Ventajas y desventajas}
\tableofcontents[currentsection]
\end{frame}

\subsection{Ventajas}
\begin{frame}
\frametitle{Ventajas}
\begin{itemize}
\item Se pueden comparar diferentes versiones de los archivos
\item Permiten recuperar versiones pasadas
\item Nos proporcionan un historial de los cambios y comentarios
\item Resuelven la problemática de combinar los cambios realizados por diferentes usuarios sobre los mismos archivos
%\item Nos permiten actualizar nuestra copia local con la última versión que se encuentra en el servidor
\item Simplifica la administración
\end{itemize}

\end{frame}

\subsection{Desventajas}
\begin{frame}
\frametitle{Desventajas}
\begin{itemize}
\item Se debe capacitar a los miembros del proyecto para el uso de la herramienta
\item Necesidad de montar una infraestructura para operar con el servidor de integración, o bien requerir el servicio de un tercero
\end{itemize}

\end{frame}

\section{Distintas arquitecturas} 
\tableofcontents[currentsection]

\subsection{Centralizada}

\begin{frame}[allowframebreaks]
\frametitle{Arquitectura centralizada}
Las sistemas de control de versiones centralizados se basan en un esquema Cliente/Servidor, en donde, el servidor:

\begin{itemize}
\item Almacena todas las versiones del proyecto
\item Utiliza control de concurrencia y bloqueos
\item Maneja transacciones
\item Provee una interfaz de acceso para los clientes
\end{itemize}

y, los clientes:

\begin{itemize}
\item Mantienen una copia del repositorio
\item Se conectan con el servidor para enviar u obtener cambios 
\item Tienen utilidades para gestionar los cambios
\end{itemize}

\begin{center}
\includegraphics[scale=0.7]{img/centralizado.png}
	
Ejemplos: Subversion, CVS, Perforce, etc

\includegraphics[width=0.5\textwidth]{img/subversion.png}
	
Arquitectura de Subversion
\end{center} 
\end{frame}

\subsection{Distribuida}
\begin{frame}[allowframebreaks]
\frametitle{Arquitectura distribuida}
Los sistemas de control de versiones distribuidos se caracterizan por:
\begin{itemize}
\item No se basan en el concepto de servidor central
\item Todos los usuarios tienen su propia copia local del repositorio
\item Pueden compartirse revisiones entre los usuarios
\item Se puede trabajar \textit{offline}
\item Funcionan como una herramienta de respaldo de seguridad
\end{itemize}

\begin{center}
	\includegraphics[scale=0.65]{img/distribuido.png}
	
	Ejemplos: Git, Mercurial, Bazaar, etc
\end{center} 
\end{frame}

\begin{frame}
\frametitle{Comparación de las arquitecturas}
\begin{figure}
\subfigure[Arquitectura centralizada]{
\includegraphics[scale=0.25]{img/cvcs.png}
}
\subfigure[Arquitectura distribuida]{
\includegraphics[scale=0.25]{img/dvcs.png}
}
\end{figure}
\end{frame}

\section{Caso práctico}
\begin{frame}
\frametitle{Caso práctico}
\tableofcontents[currentsection]
\end{frame}

\frame{
\frametitle{Caso Práctico}
\begin{center}
	\includegraphics[width=0.4\textwidth]{img/google_code.jpg}
\end{center}
\begin{center}
	\includegraphics[width=0.5\textwidth]{img/tortoise.PNG}
	\hspace*{1cm}
	\includegraphics[width=0.4\textwidth]{img/rabbit.png}
\end{center} 
}

\subsection{Comandos b\'asicos}

\frame{\frametitle{El cliente}
\begin{itemize}
\item{\small Cliente para Microsoft Windows: TortoiseSVN
		\begin{itemize}		
		\item{\small \url{http://tortoisesvn.tigris.org/}}
		\item{\small Disponible para: Win2k SP4, WinXP, Vista o superiores}
		\end{itemize}}
\end{itemize}
\begin{itemize}
\item{\small Cliente para Linux: RabbitVCS
		\begin{itemize}		
		\item{\small \url{http://www.rabbitvcs.org/}}
		\item{\small Disponible para las distribuciones:}
		\includegraphics[width=0.4\textwidth]{img/distribuciones.png}
		\end{itemize}}
\end{itemize}
\begin{itemize}
\item{\small Plugins para IDEs
		\begin{itemize}		
		\item{\small Eclipse: Subclipse \url{http://subclipse.tigris.org/}}
		\item{\small Visual Studio: Ankhsvn \url{http://ankhsvn.open.collab.net/}}
		\end{itemize}}
\end{itemize}
}

\frame{\frametitle{TortoiseSVN}
\begin{center}
\includegraphics[width=0.6\textwidth]{img/tortoise.PNG}
\end{center}
\begin{itemize}		
	\item{\small Para el resto del tutorial utilizaremos el cliente TortoiseSVN}
	\item{\small Podemos descargar el instalador de: \url{http://tortoisesvn.net/downloads.html}}
\end{itemize}
}


\frame{\frametitle{Comandos b\'asicos}
\begin{itemize}
	\item{\small\textit{{\bfseries Checkout:} crea una copia de trabajo del proyecto en un directorio especificado de nuestro ordenador.}}

	\item{\small\textit{{\bfseries Commit:} envía los cambios de tu copia de trabajo al repositorio global del proyecto.}}

	\item{\small\textit{{\bfseries Update:} obtiene los cambios del repositorio global del proyecto y los escribe sobre tu copia de trabajo local.}}

	\item{\small\textit{{\bfseries Log:} muestra las distintas revisiones del proyecto, quiénes las realizaron y los mensajes que las describen.}}

	\item{\small\textit{{\bfseries Revert:} revierte cualquier cambio local a un archivo o directorio y resuelve los estados de conflicto.}}

	\item{\small\textit{{\bfseries Resolve:} resuelve el estado de conflicto de algún archivo o directorio de la copia de trabajo local.}}
\end{itemize}
}

\subsection{Creaci\'on de un proyecto en Google Code}

\begin{frame}[allowframebreaks]
\frametitle{Nuestro Proyecto en Google Code}
\setbeamercovered{dinamicly}
\begin{enumerate}
\item[1.]{\small Pre-requisito: contar con una cuenta de correo electr\'onico de Gmail}

\item[2.]{\small Entra al sitio web: \url{http://code.google.com/}}

\item[3.]{\small Selecciona la opción {\bfseries Project Hosting}}
\begin{center}
\includegraphics[width=0.6\textwidth]{img/googlecode.png}
\end{center}

\newpage % poner lo que sigue en la proxima hoja = ctrl + enter
\item[4.]{\small Contibuye al Software Libre}
\begin{center}
\includegraphics[width=0.8\textwidth]{img/googlecode2.png}
\end{center}

\newpage
\item[5.]{\small Selecciona la opción {\bfseries Create Project} en la parte inferior de la Wiki}
\begin{center}
\includegraphics[width=0.8\textwidth]{img/googlecode3.png}
\end{center}

\newpage
\item[6.]{\small Completa el formulario con los datos de tu proyecto}
\begin{center}
\includegraphics[width=0.8\textwidth]{img/googlecode4.png}
\end{center}

\newpage
\item[7.]{\small Dale un vistazo al panel de tu proyecto}
\begin{center}
\includegraphics[width=0.9\textwidth]{img/proyecto.png}
\end{center}

\newpage
\item[8.]{\small Agrega miembros a tu proyecto}
\begin{center}
\includegraphics[width=0.9\textwidth]{img/miembros.png}
\end{center}

\newpage
\item[9.]{\small El directorio de nuestro proyecto}
\begin{center}
\includegraphics[width=0.8\textwidth]{img/directorio.png}
\end{center}

\newpage
\item[10.]{\small Las revisiones de nuestro proyecto}
\begin{center}
\includegraphics[width=0.8\textwidth]{img/revisiones.png}
\end{center}

\end{enumerate}
\end{frame}




\frame{\frametitle{Checkout}
\begin{enumerate}
	\item[1.]{\small Creamos la carpeta en donde tendremos la copia local del proyecto}
	\item[2.]{\small Hacemos click derecho sobre dicha carpeta y luego sobre la opción {\bfseries SVN Checkout\ldots}}
	\item[3.]{\small Nos aparecer\'a una imagen como la siguiente:}
\end{enumerate}
\begin{center}
	\includegraphics[width=0.4\textwidth]{img/checkout.png}
\end{center}
}

\frame{\frametitle{Checkout}
\begin{enumerate}
	\item[4.]{\small El siguiente paso ser\'a especificar la URL del repositorio global del proyecto. Para obtener dicha URL ingresamos a la p\'agina web de nuestro proyecto en Google Code}
	\item[5.]{\small Luego nos dirigimos a la secci\'on {\bfseries Source} y copiamos la URL tal como se encuentra marcada en la siguiente imagen:}
\end{enumerate}
\begin{center}
\includegraphics[width=0.8\textwidth]{img/source2.png}
\end{center}
}

\frame{\frametitle{Checkout}
\begin{enumerate}
	\item[6.]{\small Pegamos la URL en el campo {\bfseries URL del repositorio} que aparece en la pantalla del Checkout
	\begin{center}
	\includegraphics[width=0.6\textwidth]{img/checkout2.png}
	\end{center}}
	\item[7.]{\small Hacemos click en {\bfseries OK} para finalizar}
\end{enumerate}
}

\frame{\frametitle{Commit}
\begin{enumerate}
	\item[1.]{\small Seleccionamos la carpeta de nuestra copia de trabajo.}
	\item[2.]{\small Hacemos click derecho sobre la misma y seleccionamos la opci\'on {\bfseries SVN Commit}. Nos aparecer\'a un panel como el siguiente:		\begin{center}
		\includegraphics[width=0.8\textwidth]{img/commit.png}
	\end{center}}
	\item[3.]{\small Una vez seleccionados los archivos y/o directorios que se quieren subir, hacemos click en {\bfseries OK} para realizar el commit.}
\end{enumerate}
}

\frame{\frametitle{Update}
\begin{enumerate}
	\item[1.]{\small Seleccionamos la carpeta de nuestra copia de trabajo y hacemos click derecho sobre la misma.}
	\item[2.]{\small Seleccionamos la opci\'on {\bfseries SVN Update}. Nos aparecer\'a un panel como el siguiente:
	\begin{center}
	\includegraphics[width=0.8\textwidth]{img/update.png}
	\end{center}}
	\item[3.]{\small Una vez finalizada la actualización hacemos click en {\bfseries OK}.}
\end{enumerate}
}

\frame{\frametitle{Log}
\begin{enumerate}
	\item[1.]{\small Seleccionamos la carpeta o archivo cuyo estado queremos visualizar y hacemos click derecho sobre la misma.}
	\item[2.]{\small Nos dirigimos hacia la la opci\'on {\bfseries TortoiseSVN} y seleccionamos la opción {\bfseries Show Log}. Nos aparecer\'a un panel como el siguiente:
	\begin{center}
	\includegraphics[width=0.8\textwidth]{img/log.png}
	\end{center}}
\end{enumerate}
}

\frame{\frametitle{Revert}
\begin{enumerate}
	\item[1.]{\small Seleccionamos la carpeta o archivo cuyo estado queremos revertir y nos dirigimos a la opción {\bfseries Show Log}.}
	\item[2.]{\small Nos posicionamos sobre la revisión que contiene la versión a la cual queremos revertir y hacemos click derecho sobre la misma.
	\begin{center}
	\includegraphics[width=0.4\textwidth]{img/revert.jpg}
	\end{center}}
	\item[3.]{\small Seleccionamos la opción {\bfseries Revert to this revision} y aceptamos la advertencia que se muestra.}
\end{enumerate}
}

\subsection{Conflictos}

\frame{\frametitle{Resolve}
	Supongamos que decidimos actualizar un archivo de nuestra copia local. Si estamos trabajando sobre una versión desactualizada del archivo, es decir, se han realizado cambios en el repositorio, pueden ocurrir dos cosas:
	\begin{enumerate}
		\item[1.]{\small Que las modificaciones sean diferentes, por lo tanto no hay que hacer nada ya que \textit{svn} se encarga de mezclar ambas versiones.}
		\item[2.]{\small 
		Que las modificaciones sean en la misma región, con lo que no se podrían resolver de forma automática dando lugar a un {\bfseries conflicto}.  Frente a esta situación, es necesaria la intervención manual para decidir la versión correcta de los archivos en conflicto.}
	\end{enumerate}
}

\frame{\frametitle{Resolve}
	El conflicto se podrá presentar de dos maneras:
	\begin{enumerate}
		\item[1.]{\small En algunos clientes, como es el caso de TortoiseSVN, el archivo en conflicto conservará tus cambios y los correspondientes a otros miembros del proyecto, \textit{ambos en el mismo archivo}. Tus cambios estarán marcados como {\bfseries mine}, mientras que los cambios de otros miembros del proyecto estarán marcados como {\bfseries r4}. Puedes utilizar un editor de texto para borrar el cambio que no corresponda. No olvides borrar los comentarios que crea SVN para marcar las partes en conflicto.}
		\item[2.]{\small En otros clientes, tales como RabbitSVN, se generan tres archivos:
		\begin{itemize}
			\item{\small {\bfseries .mine:} la versión con la que estamos trabajando.}
			\item{\small {\bfseries .r3:} la versión que había en el repositorio sobre la que estabamos trabajando.}
			\item{\small {\bfseries .r4:} la versión actual del repositorio.}
		\end{itemize}}
	\end{enumerate}
	
}

\subsection{Servidores alternativos}
\frame{\frametitle{Servidores alternativos}

Existen dos opciones utilizadas para alojar los servidores de los sistemas de control de versiones:
\begin{enumerate}
	\item{\small En un servidor propio}
	\item{\small En un servicio brindado por una empresa. Se  suelen brindar servicios gratuitos o pagos que permiten crear proyectos privados y públicos.}	
\end{enumerate}
}

\begin{frame}
\frametitle{Referencias}
\begin{thebibliography}{99}
\bibitem{gitbook} \url{http://progit.org/book/es/ch1-1.html}
\bibitem{dd} \url{http://openideas.info/wiki/index.php?title=Guidelines:SVN_es}

\end{thebibliography}
\end{frame}
\end{document}

